package com.qianda.qdminiapp.common.future;

public interface CommandFutureManager {
    /**
     * 启动之后才能添加指令执行将来时
     *
     * @throws Exception 发生异常
     */
    void start() throws Exception;

    /**
     * 停止之后不能添加指令执行将来时
     *
     * @throws Exception 发生异常
     */
    void shutdown() throws Exception;

    /**
     * 添加指令执行将来时
     *
     * @param futureId 指定的键值
     * @param future   指令执行将来时
     * @param ttl      指令执行将来时存活时间单位秒，超过这个时间将会排除管理
     * @return 是否添加成功
     */
    boolean add(String futureId, CommandFuture future, long ttl);

    /**
     * 移除指令执行将来时
     *
     * @param futureId 指定的键值
     */
    void remove(String futureId);

    /**
     * 设置指令执行结果，如果存在该指令执行将来时，则成功设置然后移除该指令执行将来时
     *
     * @param futureId 键，有可能不存在该指令执行将来时
     * @param result   指令执行结果
     */
    void setResult(String futureId, Object result);

    /**
     * 设置指令执行结果，设置异常结果，如果存在该指令执行将来时，则成功设置然后移除该指令执行将来时
     *
     * @param futureId 键，有可能不存在该指令执行将来时
     * @param ex       异常对象
     */
    void setException(String futureId, Exception ex);

    /**
     * 设置指令执行结果，取消，如果存在该指令执行将来时，则成功设置然后移除该指令执行将来时
     *
     * @param futureId 键，有可能不存在该指令执行将来时
     */
    void setCancellation(String futureId);

}
